import { getToken, setToken, removeToken } from '@/utils/auth'
import { getProfile, login, getUserDetailById } from '@/api/user'
import { Message } from 'element-ui'
import { resetRouter } from '@/router'

const state = () => ({
  // 先从本地cookie取值 没有话使用初始化值
  token: getToken() || '',
  // 初始化用户基本信息对象
  userInfo: {}
})

const mutations = {
  // 修改token值
  SETTOKEN(state, newToken) {
    // vuex存储
    state.token = newToken
    // 本地cookie 持久化保存
    setToken(newToken)
  },
  // 更新用户基本信息
  SETUSERINFO(state, userInfo) {
    state.userInfo = userInfo
  }
}

const actions = {
  //  (context,payload){异步操作mutations方法}
  // ! 1.登录请求
  async userLogin({ commit }, data) {
    const res = await login(data)
    // console.log(res)
    // 获取到新的token 操作mutation 修改数据
    commit('SETTOKEN', res.data)
    Message.success(`${res.message},欢迎回来`)
  },

  //! 2. 获取用户的基本信息请求
  async  getInfo({ commit }) {
    // 调用请求接口api
    // console.log('获取用户基本信息')
    const res = await getProfile()
    const re = await getUserDetailById(res.data.userId)
    // console.log(res)
    // console.log(re)
    // 调用mutation 设置用户信息
    commit('SETUSERINFO', { ...res.data, ...re.data })
  },
  //! 3.用户退出 清空token以及userInfo
  logOut({ commit }) {
    commit('SETTOKEN', '')
    commit('SETUSERINFO', {})
    removeToken()
    resetRouter()
  }
}

export default {
  // 使用时是否需要携带模块名
  namespaced: true,
  state,
  mutations,
  actions
}

